<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function* generator_test(){
            console.log('司国义');
            yield 'guoyi';//暂停
            console.log('武烁打两个司国义');
            yield 'wushuo'
        }
        // 是generator函数调用
        let test1 = generator_test();
        console.log(test1);
        let test2 = test1.next();
        console.log(test2);
        let test3 = test1.next();
        console.log(test3);
        let test4 = test1.next();
        console.log(test4);

        // Generator 函数
        // es6提供的解决异步编程的方案之一
        // Generator函数中的代码通过调用next方法往下执行，遇见yield停止 如果再想往下执行需要再次调用next 这个现象该函数的状态机，内部封装了不同的状态
        // 惰性求值

        /* 
        特点：
        function和函数名之间有个星号
        内部的yield表达式来定义不同的状态
        函数的返回值就是一个指针对象同iterator中的类似
        next方法函数调用，函数内部代码开始执行，遇见yield暂停返回{value:'yield后面的表达式的结果或者undefined'，done:true/false}
        
        
        
        
        */
    </script>
</body>
</html>